/**
 *
 */
package com.zhengtoon.mctoon.conv.service.sdzc;

import com.zhengtoon.mctoon.conv.bean.sdzc.Letter;
import com.zhengtoon.mctoon.conv.bean.sdzc.Reply;
import com.zhengtoon.mctoon.conv.dao.sdzc.LetterMapper;
import com.zhengtoon.mctoon.conv.dao.sdzc.ReplyMapper;
import com.zhengtoon.mctoon.conv.dao.sdzc.TransferLetterMapper;
import com.zhengtoon.mctoon.conv.dto.sdzc.ReplyDto;
import com.zhengtoon.mctoon.conv.dto.sdzc.TransferLetterDto;
import com.zhengtoon.mctoon.conv.dto.sdzc.ZfhfLetterResultDto;
import com.zhengtoon.mctoon.conv.service.sdzc.ReplyService;
import com.zhengtoon.mctoon.conv.utils.DateFormatAppUtils;
import com.zhengtoon.mctoon.conv.utils.sdzc.ZfhfConstant;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 信件回复 impl实现
 *
 * @author 刘振华
 * @since 2017-04-12
 * Copyright: Copyright (c) 2017
 * Company:北京政务通科技有限公司
 */
@Service
public class ReplyServiceImpl implements ReplyService {

    private static Logger log = LoggerFactory.getLogger(ReplyServiceImpl.class);

    @Autowired
    private ReplyMapper replyMapper;

    @Autowired
    private LetterMapper letterMapper;

    @Autowired
    TransferLetterMapper ghlTransferLetterMapper;


    @Override
    public Reply selectSingle(String ghlReplyId, String ghlSysLetterId, String ghlTransferLetterId, String ghlReplyType, String ghlReplyTitle, String ghlReplyContent, String ghlReplyOrgName, String ghlReplyUser, String ghlReplyDate, String ghlOpenFlag, String createTime, String updateTime) {
        return replyMapper.selectSingle(ghlReplyId, ghlSysLetterId, ghlTransferLetterId, ghlReplyType, ghlReplyTitle, ghlReplyContent, ghlReplyOrgName, ghlReplyUser, ghlReplyDate, ghlOpenFlag, createTime, updateTime);
    }

    /**
     * 获取最新回复
     *
     * @param ghlSysLetterId
     * @return
     */
    @Override
    public Reply queryNewestReplyBySysLetterId(String ghlSysLetterId) {
        return replyMapper.queryNewestReplyBySysLetterId(ghlSysLetterId);
    }

    /**
     * 根据子信件获取回复列表
     *
     * @param transferLetterId 转办子信件id
     * @return TransferLetterDto
     * @author 144637
     */
    @Override
    public TransferLetterDto queryReplyById(String transferLetterId) {

        TransferLetterDto transferDto = new TransferLetterDto();

        List<ReplyDto> childReplyList = new ArrayList<>();

        transferDto.setTransferLetterId(transferLetterId);

        // 查询部门回复
        List<Reply> replyList = replyMapper.queryReplyById(transferLetterId);

        for (Reply reply : replyList) {
            ReplyDto childReplyDto = new ReplyDto();
            transferDto.setReplyOrgName(reply.getReplyOrgName());
            childReplyDto.setReplyContent(reply.getReplyContent());
            childReplyDto.setReplyDate(reply.getReplyDate());
            childReplyList.add(childReplyDto);
        }

        transferDto.setReplys(childReplyList);
        return transferDto;
    }

    /**
     * 根据convId查询政风系统信件回复
     *
     * @param convId 随手拍记录id
     * @return List<ZfhfLetterResultDto>
     * @author 144637
     */
    @Override
    public List<ZfhfLetterResultDto> queryZfhfReplyByConvId(Long convId) {

        Letter letterEntity = letterMapper.queryLetterByConvId(convId);

        if (letterEntity == null) {
            return null;
        }

        // 1. 处理不受理的信件
        if (ZfhfConstant.BJT_LETTER_STATUS_NOT_ACCEPT.equals(letterEntity.getBjtStatus())) {
            return getNotAcceptLetterResultDto(letterEntity);
        }
        List<Reply> replyList = replyMapper.queryReplyBySysletterId(letterEntity.getSysLetterId());

        // 2. 处理无回复的信件
        if (replyList.size() == 0) {
            return getNoReplyLetterResultDto(letterEntity);
        }

        // 3. 处理正常回复的信件
        return getNormalReplyLetterResultDto(letterEntity, replyList);
    }

    /**
     * 处理正常的回复返回内容
     *
     * @param letterEntity 信件实体
     * @param replyList    回复实体列表
     * @return List<ZfhfLetterResultDto>
     * @author 144637
     */
    private List<ZfhfLetterResultDto> getNormalReplyLetterResultDto(Letter letterEntity, List<Reply> replyList) {
        /*
         提交政风行风热线时间：2017-06-15 12:34
         标题：关于朝阳路126号附近井盖丢失问题。
         回复单位：市交通委
         首都之窗反馈结果：您好，您的来信已经收到。您提供的情况已由朝阳区城管执行分队处理完毕，丢失井盖的通信井上已经安装上新的井盖。
         是否公开：否
         政风行风热线反馈时间：2017-06-30 15:55
        */
        List<ZfhfLetterResultDto> dtoList = new ArrayList<>();
        for (Reply reply : replyList) {
            ZfhfLetterResultDto dto = new ZfhfLetterResultDto();
            dto.setZfhfSubmitTime(DateFormatAppUtils.getFormatDate(letterEntity.getCreateTime()));
            dto.setZfhfFeedbackTime(reply.getReplyDate());
            dto.setZfhfIsPublic(reply.getOpenFlag());
            dto.setZfhfTitle(letterEntity.getLetterTitle());
            dto.setZfhfReplyDept(reply.getReplyOrgName());
            dto.setZfhfReplyResult(reply.getReplyContent());
            dtoList.add(dto);
        }
        return dtoList;
    }

    /**
     * 处理无回复的信件返回内容
     *
     * @param letterEntity 信件实体
     * @return List<ZfhfLetterResultDto>
     * @author 144637
     */
    private List<ZfhfLetterResultDto> getNoReplyLetterResultDto(Letter letterEntity) {
         /*
          全部
         提交政风行风热线时间：2017-06-15 12:34
         标题：关于朝阳路126号附近井盖丢失问题。
         回复单位：市交通委
         首都之窗反馈结果：您好，您的来信已经收到。您提供的情况已由朝阳区城管执行分队处理完毕，丢失井盖的通信井上已经安装上新的井盖。
         是否公开：否
         政风行风热线反馈时间：2017-06-30 15:55
         */

//         提交政风行风热线时间：2017-06-15 12:34
//         标题：关于朝阳路126号附近井盖丢失问题。
        List<ZfhfLetterResultDto> dtoList = new ArrayList<>();
        ZfhfLetterResultDto dto = new ZfhfLetterResultDto();
        dto.setZfhfSubmitTime(DateFormatAppUtils.getFormatDate(letterEntity.getCreateTime()));
        dto.setZfhfTitle(letterEntity.getLetterTitle());
        dto.setZfhfReplyResult(ZfhfConstant.NOT_REPLY_RESULT);
        dtoList.add(dto);
        return dtoList;
    }

    /**
     * 不处理的信件返回内容
     *
     * @param letterEntity 信件实体
     * @return List<ZfhfLetterResultDto>
     * @author 144637
     */
    private List<ZfhfLetterResultDto> getNotAcceptLetterResultDto(Letter letterEntity) {
        /*
         全部
         提交政风行风热线时间：2017-06-15 12:34
         标题：关于朝阳路126号附近井盖丢失问题。
         回复单位：市交通委
         首都之窗反馈结果：您好，您的来信已经收到。您提供的情况已由朝阳区城管执行分队处理完毕，丢失井盖的通信井上已经安装上新的井盖。
         是否公开：否
         政风行风热线反馈时间：2017-06-30 15:55
         */
//         提交政风行风热线时间：2017-06-15 12:34
//         标题：关于朝阳路126号附近井盖丢失问题。
//         首都之窗反馈结果：您好，您的来信已经收到。您提供的情况已由朝阳区城管执行分队处理完毕，丢失井盖的通信井上已经安装上新的井盖。
//         政风行风热线反馈时间：2017-06-30 15:55

        List<ZfhfLetterResultDto> dtoList = new ArrayList<>();
        ZfhfLetterResultDto dto = new ZfhfLetterResultDto();
        dto.setZfhfSubmitTime(DateFormatAppUtils.getFormatDate(letterEntity.getCreateTime()));
        dto.setZfhfTitle(letterEntity.getLetterTitle());
        dto.setZfhfReplyResult(ZfhfConstant.NOT_ACCEPT_RESULT);
        dto.setZfhfFeedbackTime(DateFormatAppUtils.getFormatDate(letterEntity.getUpdateTime()));
        dtoList.add(dto);
        return dtoList;
    }

}